// 1.暴力for循环
// function removeElement(arr, elem) {
//   let size = arr.length;
//   for (let i = 0; i < size; i++) {
//     if (arr[i] === elem) {
//       for (let j = i + 1; j < size; j++) {
//         arr[j - 1] = arr[j];
//       }
//       size--;
//       i--;
//     }
//   }
//   return size;
// }

// 2.双指针写法
// function removeElement(arr, elem) {
//   // 1.定义两个指针，一个快指针和一个慢指针
//   let slowIndex = 0;
//   let size = arr.length;
//   for (let fastIndex = 0; fastIndex < size; fastIndex++) {
//     if (arr[fastIndex] !== elem) {
//       arr[slowIndex++] = arr[fastIndex];
//     }
//   }
//   return slowIndex;
// }

// 3.双指针优化
function removeElement(arr, elem) {
  let left = 0;
  let right = arr.length - 1;
  while (left <= right) {
    // 如果左指针等于移除元素，则将右指针的值赋值给左指针
    if (arr[left] === elem) {
      arr[left] = arr[right];
      right--;
    } else {
      left++;
    }
  }
  return left;
}

const arr = [3, 3, 2, 2, 5, 4, 5, 3];
const elem = 3;
console.log("原长度：", arr.length);
const res = removeElement(arr, elem);
console.log(res);
